## 练习 4：分析 apache 访问日志
# 需求：编写一个日志分析脚本：
# - 统计每个客户端(ip)访问服务器的次数  {"192.168.1.10":3, k:v}
#       程序 = 数据结构 + 算法
# - 分别统计客户端是 Firefox 和 MSIE 的访问次数
#        {"Firefox": 3, "MSIE": 4}
# - 分别使用函数的方式实现
import re
def count_pattern(fname, pattern):
    pattern_dict = {}  # 存储数据的字典
    cpatt = re.compile(pattern)  # 生成正则对象
    with open(fname, mode="r") as fr:  # 读取文件
        for line in fr.readlines():  # line: 行
            m = cpatt.search(line)  # m: 匹配对象(Match object)
            if m != None:  # 不为None，表示匹配到了数据
                key = m.group()  # key: MSIE
                # 如果key在字典中存在，则将该key对应的value进行+1操作
                if key in pattern_dict.keys():
                    pattern_dict[key] += 1
                else:  # key: Chrome
                    # 如果key在不字典中存在, 将key对应的value设置成1
                    pattern_dict[key] = 1
    return pattern_dict
if __name__ == '__main__':
    fname = "/opt/my_server.log"
    ip_pattern = "(\d+\.){3}\d+"  # +: 出现1次或多次
    browser_pattern = "Firefox|MSIE"
    result1 = count_pattern(fname, ip_pattern)
    result2 = count_pattern(fname, browser_pattern)
    print(result1)
    print(result2)




# vim /opt/my_server.log
#   192.168.123.10 Firefox
#   192.168.123.10 MSIE
#   192.168.123.11 Firefox
#   192.168.123.11 MSIE
#   192.168.123.12 Firefox


